<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:p="http://primefaces.org/ui"
                template="./template.xhtml">

    <ui:define name="head">
        <style type="text/css">
            .value {
                font-weight: bold;
            }
            
            .ui-datatable {
                margin-bottom: 25px
            }
            
            .ui-datatable .ui-datatable-footer {
                text-align:left;
            }
            
            .ui-datalist ul {
                padding: 0 0 0 10px;
                margin: 5px 0;
            }
            
            .ui-datatable .ui-button-icon-only .ui-button-text {
                padding: 0;
                line-height: 1.2;
            }
        </style>
	</ui:define>
    
    <ui:define name="title">
        DataTable - <span class="subitem">Selection</span>
    </ui:define>

    <ui:define name="description">
        There are various ways to select rows from the datatable.
    </ui:define>

    <ui:param name="documentationLink" value="/components/datatable" />

    <ui:define name="implementation">
        
        <h:form id="form">
            <p:growl id="msgs" showDetail="true" skipDetailIfEqualsSummary="true" />

            <p:dataTable id="basicDT" var="car" value="#{dtSelectionView.cars1}">
                <f:facet name="header">
                    Basic
                </f:facet>
                <p:column headerText="Id">
                    <h:outputText value="#{car.id}" />
                </p:column>
                <p:column headerText="Year">
                    <h:outputText value="#{car.year}" />
                </p:column>
                <p:column headerText="Brand">
                    <h:outputText value="#{car.brand}" />
                </p:column>
                <p:column headerText="Color">
                    <h:outputText value="#{car.color}" />
                </p:column>
                <p:column style="width:32px;text-align: center">
                     <p:commandButton update=":form:carDetail" oncomplete="PF('carDialog').show()" icon="pi pi-search" title="View">
                        <f:setPropertyActionListener value="#{car}" target="#{dtSelectionView.selectedCar}" />
                    </p:commandButton>
                </p:column>
            </p:dataTable>
            
            <p:dataTable id="singleDT" var="car" value="#{dtSelectionView.cars2}" selectionMode="single" selection="#{dtSelectionView.selectedCar}" rowKey="#{car.id}">
                <f:facet name="header">
                    Single with Row Click
                </f:facet>
                <p:column headerText="Id">
                    <h:outputText value="#{car.id}" />
                </p:column>
                <p:column headerText="Year">
                    <h:outputText value="#{car.year}" />
                </p:column>
                <p:column headerText="Brand">
                    <h:outputText value="#{car.brand}" />
                </p:column>
                <p:column headerText="Color">
                    <h:outputText value="#{car.color}" />
                </p:column>
                <f:facet name="footer">
                    <p:commandButton process="singleDT" update=":form:carDetail" icon="pi pi-search" value="View" oncomplete="PF('carDialog').show()" />
                </f:facet>
            </p:dataTable>
            
            <p:dataTable id="eventsDT" var="car" value="#{dtSelectionView.cars3}" selectionMode="single" selection="#{dtSelectionView.selectedCar}" rowKey="#{car.id}">
                <f:facet name="header">
                    Select Events
                </f:facet>
                <p:ajax event="rowSelect" listener="#{dtSelectionView.onRowSelect}" update=":form:msgs" />
                <p:ajax event="rowUnselect" listener="#{dtSelectionView.onRowUnselect}" update=":form:msgs" />
                <p:column headerText="Id">
                    <h:outputText value="#{car.id}" />
                </p:column>
                <p:column headerText="Year">
                    <h:outputText value="#{car.year}" />
                </p:column>
                <p:column headerText="Brand">
                    <h:outputText value="#{car.brand}" />
                </p:column>
                <p:column headerText="Color">
                    <h:outputText value="#{car.color}" />
                </p:column>
            </p:dataTable>
            
            <p:dataTable id="multipleDT" var="car" value="#{dtSelectionView.cars4}" selectionMode="multiple" selection="#{dtSelectionView.selectedCars}" rowKey="#{car.id}">
                <f:facet name="header">
                    Multiple with Meta and Shift keys
                </f:facet>
                <p:column headerText="Id">
                    <h:outputText value="#{car.id}" />
                </p:column>
                <p:column headerText="Year">
                    <h:outputText value="#{car.year}" />
                </p:column>
                <p:column headerText="Brand">
                    <h:outputText value="#{car.brand}" />
                </p:column>
                <p:column headerText="Color">
                    <h:outputText value="#{car.color}" />
                </p:column>
                <f:facet name="footer">
                    <p:commandButton process="multipleDT" update=":form:multiCarDetail" icon="pi pi-search" value="View" oncomplete="PF('multiCarDialog').show()" />
                </f:facet>
            </p:dataTable>
            
            <p:dataTable id="radioDT" var="car" value="#{dtSelectionView.cars5}" selection="#{dtSelectionView.selectedCar}" rowKey="#{car.id}">
                <f:facet name="header">
                    RadioButton
                </f:facet>
                <p:column selectionMode="single" style="width:16px;text-align:center"/>
                <p:column headerText="Id">
                    <h:outputText value="#{car.id}" />
                </p:column>
                <p:column headerText="Year">
                    <h:outputText value="#{car.year}" />
                </p:column>
                <p:column headerText="Brand">
                    <h:outputText value="#{car.brand}" />
                </p:column>
                <p:column headerText="Color">
                    <h:outputText value="#{car.color}" />
                </p:column>
                <f:facet name="footer">
                    <p:commandButton process="radioDT" update=":form:carDetail" icon="pi pi-search" value="View" oncomplete="PF('carDialog').show()" />
                </f:facet>
            </p:dataTable>
            
            <p:dataTable id="checkboxDT" var="car" value="#{dtSelectionView.cars6}" selection="#{dtSelectionView.selectedCars}" rowKey="#{car.id}" style="margin-bottom:0">
                <f:facet name="header">
                    Checkbox
                </f:facet>
                <p:column selectionMode="multiple" style="width:16px;text-align:center"/>
                <p:column headerText="Id">
                    <h:outputText value="#{car.id}" />
                </p:column>
                <p:column headerText="Year">
                    <h:outputText value="#{car.year}" />
                </p:column>
                <p:column headerText="Brand">
                    <h:outputText value="#{car.brand}" />
                </p:column>
                <p:column headerText="Color">
                    <h:outputText value="#{car.color}" />
                </p:column>
                <f:facet name="footer">
                    <p:commandButton process="checkboxDT" update=":form:multiCarDetail" icon="pi pi-search" value="View" oncomplete="PF('multiCarDialog').show()" />
                </f:facet>
            </p:dataTable>
            
            <p:dialog header="Car Info" widgetVar="carDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
                <p:outputPanel id="carDetail" style="text-align:center;">
                    <p:panelGrid  columns="2" rendered="#{not empty dtSelectionView.selectedCar}" columnClasses="label,value">
                        <f:facet name="header">
                            <p:graphicImage name="demo/images/car/#{dtSelectionView.selectedCar.brand}-big.gif"/> 
                        </f:facet>
                        
                        <h:outputText value="Id:" />
                        <h:outputText value="#{dtSelectionView.selectedCar.id}" />

                        <h:outputText value="Year" />
                        <h:outputText value="#{dtSelectionView.selectedCar.year}" />

                        <h:outputText value="Color:" />
                        <h:outputText value="#{dtSelectionView.selectedCar.color}" style="color:#{dtSelectionView.selectedCar.color}"/>
                    
                        <h:outputText value="Price" />
                        <h:outputText value="$#{dtSelectionView.selectedCar.price}" />
                    </p:panelGrid>
                </p:outputPanel>
            </p:dialog>
            
            <p:dialog header="Selected Cars" widgetVar="multiCarDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false" width="220">
                <p:outputPanel id="multiCarDetail" style="text-align:center;">
                    <ui:repeat value="#{dtSelectionView.selectedCars}" var="car">
                        <h:outputText value="#{car.id} - #{car.brand}" style="display:block"/>
                    </ui:repeat>
                </p:outputPanel>
            </p:dialog>
        </h:form>
        
    </ui:define>

</ui:composition>